<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <script>
      var obj = new Object();
      obj.name = '122';
      obj.age = 12;
      console.log(obj);
      //obj.name 获取
      //obj.name= 'jack' 修改
      var obj2 = {
        color: 'red',
        size: '30px'
      };
      /*
		Object.defineProperty(obj,attr,des)这个方法接受了三个参数
		    第一个参数obj:要修改或者定义那个属性的对象
			第二个参数attr：要修改或者新增的属性名
			第三个参数des：描述符()
			
			属性描述符
				1、value:描述属性值
				2、writable:描述属性是否可以被修改   布尔值：true：可以修改  false：不可以修改
				3、enumerable:描述属性是否可以被枚举 布尔值：true：可以被枚举  false：不可以被枚举
				4、configurable:描述属性是否可以被删除被计算  布尔值：true：可以被删除  false：不可以被删除

			存取器描述符 setter getter
				get(){
					获取属性的时候执行
				}
				set(){
					属性值发生变化时执行
				}
				注意：存取器描述符不能和value、writable同时使用；
		*/

      var one = {
        color: 'yellow',
        price: '20万',
        brand: '丰田'
      };

      //修改以有属性值
      Object.defineProperty(one, 'color', {
        // value: 'pink',
        // writable: true,
        enumerable: false,
		    configurable:false,
		get(){
			console.log("one.color我被读取了")
		},
		set(){
			console.log('属性值发生变化时color=black，我被执行了')
		},
		
      });
	  //get获取属性执行
	  one.color
	  //set属性值改变时执行
	  one.color='black'

	  delete(one.color)
      for (var attr in one) {
        console.log(attr);
      }
      //新增属性值
      Object.defineProperty(one, 'tyre', {
        value: 'four'
      });

      // 可以新增属性值还可以修改以有属性值
      console.log(one);
    </script>
  </body>
</html>
